package bancosys.tec.persist.audit.dao;

import org.hibernate.Criteria;
import org.hibernate.criterion.Restrictions;

import bancosys.tec.persist.audit.Auditable;
import bancosys.tec.persist.audit.domain.AuditEntity;
import bancosys.tec.persist.dao.BaseDAO;
import bancosys.tec.persist.dao.BeanNotFoundException;

/**
 * @created 09/10/2007
 * @author Gustavo Almeida
 */
public class AuditEntityDAO extends BaseDAO<AuditEntity> {

    /**
     * Devolve o log correspondente ao <code>auditable</code> passado como parâmetro.
     * 
     * @param auditable auditable.
     * @return o log correspondente ao <code>auditable</code> passado como parâmetro.
     * @throws BeanNotFoundException quando o <code>auditable</code> ainda não tem um log.
     */
    public AuditEntity findByAuditable(Auditable auditable) throws BeanNotFoundException {
        Criteria criteria = this.getSession().createCriteria(this.getPersistableClass());
        criteria.add(Restrictions.eq("className", auditable.getClass().getName()));
        criteria.add(Restrictions.eq("entityId", auditable.getId()));
        return this.executeSingleQuery(criteria);
    }
}
